package it.polimi.traveldream.ejb.pacchettomanagement;

import it.polimi.traveldream.ejb.acquistomanagement.Acquisto;
import it.polimi.traveldream.ejb.prodottobasemanagement.ProdottoBase;

import java.io.Serializable;










import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.Table;

/**
 * Entity implementation class for Entity: PacchettoEntity
 *
 */
@Entity
@Table(name="PACCHETTO")
@NamedQueries({
	@NamedQuery(name=Pacchetto.FIND_ALL,
				query="SELECT p FROM Pacchetto p "),
	@NamedQuery(name=Pacchetto.FIND_VOLO,
				query="SELECT p FROM Pacchetto p WHERE p.volo.aeroportoPartenza = :aeroPart AND p.volo.aeroportoArrivo = :aeroArr "),
	@NamedQuery(name=Pacchetto.TROVA,
				query="SELECT p FROM Pacchetto p WHERE p.idPacchetto = :idPacchetto")
})
public class Pacchetto implements Serializable {

	public Pacchetto() {
		super();
	}

	private static final long serialVersionUID = 1L;
	
	public static final String FIND_ALL = "Pacchetto.findAll";
	public static final String FIND_VOLO = "Pacchetto.findVolo";
	public static final String TROVA = "Pacchetto.TROVA";
	
	@Id
	@GeneratedValue (strategy=GenerationType.IDENTITY)
	private int idPacchetto;
	
	private String nome;

	private String descrizione;
	
	private Float prezzo;
	
	@ManyToOne
	@JoinTable(name = "phasAlbergo",
		inverseJoinColumns={@JoinColumn(name="idProdottoBase",referencedColumnName="IDPRODOTTOBASE")}, joinColumns={@JoinColumn(name="idPacchetto", referencedColumnName="IDPACCHETTO")})
	private ProdottoBase albergo;

	@ManyToOne
	@JoinTable(name = "phasVolo",
		inverseJoinColumns={@JoinColumn(name="idProdottoBase",referencedColumnName="IDPRODOTTOBASE")}, joinColumns={@JoinColumn(name="idPacchetto", referencedColumnName="IDPACCHETTO")})
	private ProdottoBase volo;
	
	@ManyToOne
	@JoinTable(name = "phasEscursione",
		inverseJoinColumns={@JoinColumn(name="idProdottoBase",referencedColumnName="IDPRODOTTOBASE")}, joinColumns={@JoinColumn(name="idPacchetto", referencedColumnName="IDPACCHETTO")})
	private ProdottoBase escursione;
	
	@OneToOne(fetch=FetchType.LAZY, mappedBy="pacchetto")
	private Acquisto acquisto;

	public Pacchetto(PacchettoDTO nuovo){
        
        this.nome			= nuovo.getNome();
        this.descrizione	= nuovo.getDescrizione();
        this.prezzo			= nuovo.getPrezzo();
    }
	
	public int getIdPacchetto() {
		return idPacchetto;
	}

	public void setIdPacchetto(int idPacchetto) {
		this.idPacchetto = idPacchetto;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getDescrizione() {
		return descrizione;
	}

	public void setDescrizione(String descrizione) {
		this.descrizione = descrizione;
	}


	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	public static String getFindAll() {
		return FIND_ALL;
	}

	public ProdottoBase getAlbergo() {
		return albergo;
	}

	public void setAlbergo(ProdottoBase albergo) {
		this.albergo = albergo;
	}

	public ProdottoBase getVolo() {
		return volo;
	}

	public void setVolo(ProdottoBase volo) {
		this.volo = volo;
	}

	public ProdottoBase getEscursione() {
		return escursione;
	}

	public void setEscursione(ProdottoBase escursione) {
		this.escursione = escursione;
	}

	public Float getPrezzo() {
		return prezzo;
	}

	public void setPrezzo(Float prezzo) {
		this.prezzo = prezzo;
	}

	public Acquisto getAcquisto() {
		return acquisto;
	}

	public void setAcquisto(Acquisto acquisto) {
		this.acquisto = acquisto;
	}

	public static String getFindVolo() {
		return FIND_VOLO;
	}
	
	
}